package com.sunday.study.aspectJ.generic;

import java.util.Collection;

/**
 * 建议参数和泛型
 * Spring AOP 可以处理类声明和方法参数中使用的泛型。假设 您有一个泛型类型，如下所示：
 *
 * public interface Sample<T> {
 *     void sampleGenericMethod(T param);
 *     void sampleGenericCollectionMethod(Collection<T> param);
 * }
 *
 * 您可以通过以下方式将方法类型的截获限制为某些参数类型 将 advice 参数绑定到要截获该方法的参数类型：
 *
 * @Before("execution(* ..Sample+.sampleGenericMethod(*)) && args(param)")
 * public void beforeSampleMethod(MyType param) {
 *     // Advice implementation
 * }
 *
 * 此方法不适用于泛型集合。所以你不能定义一个 切入点如下：
 *
 * 爪哇岛科特林
 * @Before("execution(* ..Sample+.sampleGenericCollectionMethod(*)) && args(param)")
 * public void beforeSampleMethod(Collection<MyType> param) {
 *     // Advice implementation
 * }
 *
 * 为了完成这项工作，我们必须检查集合的每个元素，这不是 合理，因为我们也无法决定如何对待一般价值观。要实现 与此类似的东西，您必须键入参数并手动 检查元素的类型。nullCollection<?>
 *
 */
public interface Sample<T> {

    void sampleGenericMethod(T param);

    void sampleGenericCollectionMethod(Collection<T> param);
}